import { DT_ADD_MONSTER, LR_RANDOM_SPACE } from "../../config/play_def";
import { BoidStatus } from "../../config/boid_def";
cc.Class({
    extends: cc.Component,

    properties: {
        idCount: {
            visible:false,
            default:1,
            type:cc.Integer
        },      // 计数id
        await_boids_list:[],
        boids_list:[],

        way_size: cc.Size,      // 格子大小
        way_node: cc.Node,      // 场子格子宽度

        enter_node:cc.Node,     // 入口节点
        ground_node:cc.Node,    // 狼群移动节点
        check_monster_time:0,   // 添加计数

        checkOver:false         // 检查是否通关
    },
    initInfo(){
        if(!he.pool.getPool('monster')){
            he.pool.createPool('monster',5,cc.Prefab,"prefab/monster")//如果没有池子就创建出来
        }
    },
    // 获取 队列 横坐标
    getXOffset(order){
        let leftPadding = (this.way_node.width - this.way_size.width * 5)/2
        // console.log(leftPadding,"position",leftPadding + this.way_size.width * (order + 0.5))
        return leftPadding + this.way_size.width * (order + 0.5)
    },
    //     // 开始检测怪物数量
    changeOver(status){
        this.checkOver = status
        if(gg.data.status && this.checkOver && !this.getLiveBool() && gg.data.status){
            gg.data.gameWin()
        } 
    },
    // 是否有活的单位
    getLiveBool(){
        for(let i = this.boids_list.length - 1;i >= 0;i--){
            if(this.boids_list[i].canAttack()){
                return true
            }
        }
        return false
    },
    // 添加怪物
    addMonsterWait(order,mid,teamOrder){
        this.await_boids_list.push({
            order:order,        // 队列
            mid:mid,            // 怪物
            teamOrder:teamOrder // 当前怪物 所在排序队列
        })
    },
    // 检测是否添加完成
    checkMonsterWait(dt){
        if(!gg.data.status || gg.data.pause || !this.await_boids_list.length){
            return
        }
        this.check_monster_time += dt
        if(this.check_monster_time > DT_ADD_MONSTER){
            this.check_monster_time = 0
            let teamCode = this.await_boids_list.shift()
            let startNext = true
            for(let i = 0;i < this.await_boids_list.length;i++){
                if(teamCode.teamOrder == this.await_boids_list[i].teamOrder){
                    startNext = false
                    break
                }
            }
            this.addMonster(teamCode.order,teamCode.mid)
            if(startNext){
                for(let i = 0;i < this.boids_list.length;i++){
                    if(this.boids_list[i].status == BoidStatus.Ready){
                        this.boids_list[i].status = BoidStatus.Live
                        this.boids_list[i].node.parent = this.ground_node
                        this.boids_list[i].collision.enabled = true
                        this.boids_list[i].node.y = 0
                    }
                }
                gg.data.nextWave()
            }
        }   
    },
    // 添加怪物
    addMonster(order,mid){
        let monsterNode = he.pool.getElement('monster')
        let monsterScript = monsterNode.getComponent("monster")
        monsterScript.orderId = this.idCount
        this.idCount += 1
        if(this.idCount >= cc.macro.MAX_ZINDEX){
            this.idCount = 1
        }
        monsterScript.initInfo(mid,order)
        this.boids_list.push(monsterScript)
        this.enter_node.addChild(monsterNode)
        monsterNode.zIndex = cc.macro.MAX_ZINDEX - this.idCount
        let RandomX = -LR_RANDOM_SPACE + parseInt(Math.random() * (LR_RANDOM_SPACE * 2))
        monsterNode.x = this.getXOffset(parseInt(order)) + RandomX
        return monsterScript
    },
    // 获得单位
    getBoid(id){
        if(id){
          for(let i = this.boids_list.length - 1;i >= 0;i--){
            if(this.boids_list[i].orderId == id){
                return this.boids_list[i]
              }
          }
          return null
        }else{
          if(this.getLiveBool()){
            let randomRes = parseInt(this.boids_list.length * Math.random())
            if(this.boids_list[randomRes].canAttack()){
              return this.boids_list[randomRes]
            }else{
              return this.getBoid()
            }
          }else{
            return null
          }
        }
    },
    // 通过monster_id 获得 单位
    getBoidByMonster(id){
        for(let i = this.boids_list.length - 1;i >= 0;i--){
            if(this.boids_list[i].info && this.boids_list[i].info.monsterId == id){
              return this.boids_list[i]
            }
        }
        return null
    },
    // 删除单位
    delBoid(id,clear){
        for(let i = this.boids_list.length - 1;i >= 0;i--){
            if(this.boids_list[i].orderId == id){
                if(clear){
                    this.boids_list[i].clearInfo(true)
                }
                this.boids_list.splice(i,1)
                if(gg.data.status && this.checkOver && !this.getLiveBool() && !gg.data.checkWave()){
                    gg.data.gameWin()
                }               
                return
            }
        }
    },
    // 清除所有单位
    clearBoids(){
        for(let i = this.boids_list.length - 1;i >= 0;i--){
            if(this.boids_list[i]){
                this.boids_list[i].clearInfo(true)
                this.boids_list.splice(i,1)
            }
            
        }
    },
    // 检测当前列的层级
    checkZindex(orderId,currentY,line){
        let near_zIndex = -1
        let near_dis = 0
        for(let i = this.boids_list.length - 1;i >= 0;i--){
            if(this.boids_list[i].order_line == line && this.boids_list[i].orderId != orderId){
                let dis = currentY - this.boids_list[i].node.y
                if(dis > 0){
                    if(near_zIndex < 0){
                        near_zIndex = this.boids_list[i].node.zIndex
                        near_dis = dis
                    }else if(dis < near_dis){
                        near_zIndex = this.boids_list[i].node.zIndex
                        near_dis = dis
                    }
                }
            }
        }
        return near_zIndex - 1
    },
//     setChoose(id){
//       for(let i = this.boids_list.length - 1;i >= 0;i--){
//         if(this.boids_list[i].orderId == id){
//             this.boids_list[i].choose_tag.active = true
//         }else{
//             this.boids_list[i].choose_tag.active = false
//         }
//       }
//     },
//     // 进入战斗遮罩 都进入则发送下一波指令

//     // 进入初始遮罩
//     inEnter(id){
//         for(let i = 0;i < this.boids_list.length ;i++){
//             if(this.boids_list[i].orderId == id){                
//                 this.boids_list[i].node.setParent(this.enter_node)
//                 this.boids_list[i].node.y = - 10
//                 this.boids_list[i].node.scale = 0.5
//                 return
//             }
//         }
//     },
//     // 进入逃跑状态
//     inRunaway(id){
//       for(let i = 0;i < this.boids_list.length ;i++){
//         if(this.boids_list[i].orderId == id){  
//           this.boids_list[i].node.setParent(this.enter_node)
//           this.boids_list[i].node.y = 0
//         }
//       }
//     },
//     // 活的单位数量
//     getLiveNum(){
//         let count = 0
//         for(let i = this.boids_list.length - 1;i >= 0;i--){
//             if(this.boids_list[i].canAttack()){
//                 count += 1
//             }
//         }
//         return count
//     },
//     // 当前列活得单位
//     getLiveNumForLine(line){
//         let count = 0
//         for(let i = this.boids_list.length - 1;i >= 0;i--){
//             if(this.boids_list[i].canAttack() && line == this.boids_list[i].order_line){
//                 count += 1
//             }
//         }
//         return count
//     },
    
//     // 更改所有单位移动状态
//     changeBoidMove(status){
//         for(let i = this.boids_list.length - 1;i >= 0;i--){
//             this.boids_list[i].move = status
//         }
//     },
//     addBoidsBuffs(list){
//         for(let i = 0; i < list.length; i++){
//             let buff = list[i]
//             for(let j = this.boids_list.length - 1;j >= 0;j--){
//               let boid = this.boids_list[j]
//               if(boid.canAttack()){
//                 boid.addBuff(buff)
//               }
//             }
//         }
//     },
//     // 清除信息
//     clearInfo(){
//         // 怪物库清除
//         // 
//         // boss脚本删除
//         // 
//     },


});
